Các hiện thực Reflection_(khoa_học_máy_tính)

Một ngôn ngữ khi hỗ trợ khả năng phục hồi thường cung cấp một số tính năng, tại thời gian chạy, mà có thể là khó hay không thể thực hiện được đối với các ngôn ngữ cấp thấp. Một số tính năng đó là:

  • Xác định và chỉnh sửa các lệnh thực thi của mã nguồn (như các khối mã lệnh, lớp, phương pháp, giao thức,... vân vân.).
  • Chuyển đổi một chuỗi giống với một tên (symbolic name) của một lớp hay hàm thành một tham chiếu đến lớp hay hàm đó và có thể gọi chúng.
  • Kiểm tra, tại thời gian chạy, một chuỗi xem thử nó có thể là một câu lệnh đúng hay không. Nếu đúng, ta có thể gọi nó để thực thi.

Có nhiều cách để hiện thức các tính năng này. Ngôn ngữ thông dịch, như RubyPHP, là lý tưởng cho reflection, vì mã nguồn của chúng là không bao giờ mất trong quá trình đổi thành mã máy; bộ thông dịch luôn có mã nguồn của chương trình.

Ngôn ngữ theo hướng biên dịch dựa vào hệ thống thời gian chạy để cung cấp thông tin về mã nguồn. Ví dụ, một mã thực thi của ngôn ngữ Objective-C lưu tên của mọi phương thức vào trong một khối thực thi, cung cấp một bảng để ánh xạ những tên này với các phương thức bên dưới (hay selector cho những phương thức này), được biên dịch trong chương trình. Trong ngôn ngữ theo hướng biên dịch mà có hỗ trợ việc tạo động các hàm—như Common Lisp—thì môi trường chạy phải kèm theo trình dịch..